#include "StdAfx.h"
#include "Escenario.h"

Escenario::Escenario(String valor)
{
	id = valor;
	this->fondoDeEscenario = NULL;
	general = new General();
	pelotaEnVuelo=NULL;

}

void Escenario::SetId(String valor)
{
	id = valor;
}

String Escenario::GetId()
{
	return id;
}

void Escenario::setListaElementos(vector<Elemento*> lista)
{
	this->listaElementos = lista;
}

vector<Elemento*> Escenario::getListaElementos()
{
	return this->listaElementos;
}

void Escenario::setPelotasDisponibles(vector<Pelota*> lista)
{
	this->listaPelotasDisponibles = lista;
}

vector<Pelota*> Escenario::getPelotasDisponibles()
{
	return this->listaPelotasDisponibles;
}
vector<Pelota*> Escenario::getPelotasEnCarril()
{
	return this->listaPelotasEnCarril;
}

void Escenario::SetVectorTextura(vector<Textura*> vTextura)
{
	listaTexturas = vTextura;
}

Textura* Escenario::GetTextura(String id)
{
	Textura* miText;

	for (int i=0; i < (int) this->listaTexturas.size(); i++){

		miText = this->listaTexturas.at(i);

		if (miText->GetIdTextura().comparar(id)==0){
			return miText;
		}
	}
	return NULL;  //si no encontro nada devuelvo null
}

void Escenario::SetGeneral(General *gen)
{
	general = gen;
}

General* Escenario::GetGeneral()
{
	return general;
}

vector<Textura*> Escenario::GetListaTexturas()
{
	return listaTexturas;
}

/*
Devuelve la pelota que esta volando
*/
Pelota* Escenario::getPelotaEnVuelo(){
	Pelota* pelo=this->pelotaEnVuelo;
	return pelo;
	
}

/*
este metodo lo llama siempre el Sapo
*/
void Escenario::setPelotaEnVuelo(Pelota* pelota){
	this->pelotaEnVuelo=pelota;
}


Textura* Escenario::GetTexturaFondo(){

	//si esta cargada la devuelvo
	if (this->fondoDeEscenario != NULL) return this->fondoDeEscenario;
	
	//si no esta cargada me fijo cual es el Id y la busco en la lista de texturas
	this->fondoDeEscenario = this->GetTextura(this->GetGeneral()->GetIdTextEsc());

	if (this->fondoDeEscenario != NULL) return this->fondoDeEscenario;

	//si no esta en la lista de texturas genero una nueva

	 String color = this->GetGeneral()->GetColorFondoEsc();

	 this->fondoDeEscenario = new Textura(color);

	 return this ->fondoDeEscenario;
}

void Escenario::dibujarFondo(SDL_Surface *pantalla){

	SDL_Surface *image = this->GetTexturaFondo()->getImagen();

	//Seteo el negro como color de fondo transparente para que dibuje solo el sapo
//	SDL_SetColorKey(image, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(image->format,0,0,0));
	
	SDL_Rect rect;
	rect.x = 0;
	rect.y = 0;
	
	SDL_BlitSurface(image, 0, pantalla, &rect);

}

void Escenario::limpiarEscenario(){
	free(this->getCarril());
	this->setCarril(NULL);

	//free(this->getListaDispersores());
	vector<Dispersor*> vectorDispersores;
	this->setListaDispersores(vectorDispersores);

	vector<Elemento*> vectorElementos;
	this->setListaElementos(vectorElementos);

	vector<Sumidero*> vectorSumi;
	this->setSumideros(vectorSumi);

	this->setBonusEnPantalla(NULL);
	this->setPelotaEnVuelo(NULL);
	this->setSapo(NULL);

}